package 滑动窗口;

/**
 * 给定一个含有 n 个正整数的数组和一个正整数 target 。
 *
 * 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, ..., numsr-1, numsr] ，并返回其长度。如果不存在符合条件的子数组，返回 0 。
 * @author macy
 * @date 2025/11/4 9:38
 */
public class MinSubNums {

    public static void main(String[] args) {


        int target = 7;
        int[]  nums = {2,3,1,2,4,3};
        System.out.println(minSubArrayLen(target, nums));
    }


    public static int minSubArrayLen(int target, int[] nums) {
        if(nums==null || nums.length==0){
            return 0;
        }

        int result = Integer.MAX_VALUE;
        int sum = 0;
        int left=0;

        for (int right = 0; right < nums.length; right++) {
            sum+=nums[right];
            while(sum-nums[left]>=target){
                sum-=nums[left];
                left++;
            }

            if(sum>=target){
                result= Math.min(result,right-left+1);
            }
        }
        return result==Integer.MAX_VALUE?0:result;
    }


}
